package demo1229.am;

import java.util.concurrent.*;
/*
  JDK5加入,与Runnable接口类似,实现之后代表一个线程任务.
  Callable具有泛型返回值,可以声明异常.
  java.util.concurrent 接口 Callable<V>
    {V call()throws Exception}

  ExecutorService接口中的方法:
  <T> Future<T> submit(Callable<T> task);
  提交一个返回值的任务用于执行，返回一个表示任务的未决结果的 Future。
  该 Future 的 get 方法在成功完成时将会返回该任务的结果。
 */
public class Demo_03 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService threadPool = Executors.newFixedThreadPool(2);

        Future<Integer> result = threadPool.submit(new CallImpl());
      /*
      笔记:插补 ：面对对象
        Runnable ad = new Runnable() {
            @Override
            public void run() {
                //可以new一个接口，但是必须要实现其中的方法
                //就算你用一个类实现这个接口，类里面也还要实现接口中的方法
                //任何一个类都可new 类名()  拿来用
            }
        }*/
        Integer sum = result.get();
        System.out.println(sum);
        threadPool.shutdown();
    }
}
class CallImpl implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <101 ; i++) {
            sum+=i;
        }
        return sum;
    }
}